﻿unit UNewClient;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, cxGraphics, cxControls, cxLookAndFeels,
  cxLookAndFeelPainters, dxSkinsCore, dxSkinOffice2007Blue, dxSkinscxPCPainter,
  cxPCdxBarPopupMenu, cxPC, UFrameSave, cxContainer, cxEdit, cxMaskEdit,
  cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, cxCheckBox,
  cxMemo, cxTextEdit, cxLabel, cxGroupBox, Menus, Vcl.StdCtrls, cxButtons,
  cxCalc, MemDS, DBAccess, Uni, Vcl.Mask, sMaskEdit, sCustomComboEdit,
  sCurrEdit, sTooledit, UFrameTopPanel, cxStyles, cxCustomData, cxFilter,
  cxData, cxDataStorage, DB, cxDBData, cxGridLevel, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxClasses, cxGridCustomView, cxGrid;

type
  TFNewClient = class(TForm)
    FrameSave1: TFrameSave;
    Page1: TcxPageControl;
    TabOsn: TcxTabSheet;
    TabUrInfo: TcxTabSheet;
    Group1: TcxGroupBox;
    lblName: TcxLabel;
    edtName: TcxTextEdit;
    Label1: TcxLabel;
    edtPhone: TcxTextEdit;
    lblAddr: TcxLabel;
    LabelEmail: TcxLabel;
    edtEmail: TcxTextEdit;
    lblStat: TcxLabel;
    edtStat: TcxLookupComboBox;
    mmoComent: TcxMemo;
    lblComment: TcxLabel;
    cxLabel2: TcxLabel;
    edtFAX: TcxTextEdit;
    Group2: TcxGroupBox;
    Label40: TcxLabel;
    Label24: TcxLabel;
    Label25: TcxLabel;
    Label26: TcxLabel;
    Label27: TcxLabel;
    Label28: TcxLabel;
    mmoAdress: TcxMemo;
    btnAdres: TcxButton;
    QueryStat: TUniQuery;
    dsStat: TDataSource;
    edtCountry: TcxTextEdit;
    Label2: TcxLabel;
    edtCity: TcxTextEdit;
    Label3: TcxLabel;
    Query1: TUniQuery;
    edtManager: TcxLookupComboBox;
    lblManager: TcxLabel;
    dsManager: TDataSource;
    QueryManager: TUniQuery;
    edtDayAlarm: TsCalcEdit;
    edtSrokDolg: TsCalcEdit;
    edtSumDolg: TsCalcEdit;
    Group3: TcxGroupBox;
    label11: TcxLabel;
    mmoUrName: TcxMemo;
    label6: TcxLabel;
    label9: TcxLabel;
    mmoFactAdres: TcxMemo;
    label10: TcxLabel;
    mmoDostavka: TcxMemo;
    mmoUrAdres: TcxMemo;
    label7: TcxLabel;
    edtINN: TcxTextEdit;
    edtOGRN: TcxTextEdit;
    label8: TcxLabel;
    edtOKPO: TcxTextEdit;
    label16: TcxLabel;
    edtInFace: TcxTextEdit;
    cxLabel1: TcxLabel;
    edtSign: TcxTextEdit;
    Label35: TcxLabel;
    btnAddRegAdr: TcxButton;
    btnAddPostAdr: TcxButton;
    btnAddUrAdr: TcxButton;
    Group4: TcxGroupBox;
    edtPasportCod: TcxTextEdit;
    label12: TcxLabel;
    label13: TcxLabel;
    edtNumberPasport: TcxTextEdit;
    label14: TcxLabel;
    label15: TcxLabel;
    mmoVidan: TcxMemo;
    edtDatePasport: TsDateEdit;
    TabДоговора: TcxTabSheet;
    FrameTopPanel1: TFrameTopPanel;
    GridTarif: TcxGrid;
    cxGridDBTableView2: TcxGridDBTableView;
    ColumnAirLine: TcxGridDBColumn;
    cxGridLevel2: TcxGridLevel;
    QueryContract: TUniQuery;
    dsContract: TDataSource;
    procedure btnAddPostAdrClick(Sender: TObject);
    procedure btnAddRegAdrClick(Sender: TObject);
    procedure btnAddUrAdrClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnAdresClick(Sender: TObject);
    procedure FrameSave1btnSaveClick(Sender: TObject);
    procedure FrameTopPanel1btnAddClick(Sender: TObject);
    procedure FrameTopPanel1btnDelClick(Sender: TObject);
    procedure FrameTopPanel1btnEditClick(Sender: TObject);
    procedure FrameTopPanel1btnRefreshClick(Sender: TObject);
  private
    { Private declarations }
  public
    s_id_client: Integer;
    s_id_type_for_edit: Integer;
    s_id_org: Integer;
    procedure InsertUpdClient(id_ins: boolean);
    procedure SetLang;
    procedure ShowManager(s_id_manager: Integer = 0);
    procedure ShowStat(s_id_stat: Integer = 0);
    { Public declarations }
  end;

var
  FNewClient: TFNewClient;

implementation

{$R *.dfm}

uses UAdress, PGSQL, UPasswd;

procedure TFNewClient.btnAddPostAdrClick(Sender: TObject);
begin
  SelectAddress(mmoDostavka);
end;

procedure TFNewClient.btnAddRegAdrClick(Sender: TObject);
begin
  SelectAddress(mmoFactAdres);
end;

procedure TFNewClient.btnAddUrAdrClick(Sender: TObject);
begin
  SelectAddress(mmoUrAdres);
end;

procedure TFNewClient.btnAdresClick(Sender: TObject);
begin
  SelectAddress(mmoAdress);
end;

procedure TFNewClient.FormShow(Sender: TObject);
begin
  Page1.ActivePageIndex := 0;
  edtName.SetFocus;
end;

procedure TFNewClient.FrameSave1btnSaveClick(Sender: TObject);
begin
  FrameSave1.btnSaveClick(Sender);
  if s_id_client = 0 then
    InsertUpdClient(true)
  else
    InsertUpdClient(false);
  Close;
end;

procedure TFNewClient.FrameTopPanel1btnAddClick(Sender: TObject);
begin
  ShowMessage('');
end;

procedure TFNewClient.FrameTopPanel1btnDelClick(Sender: TObject);
begin
  ShowMessage('');
end;

procedure TFNewClient.FrameTopPanel1btnEditClick(Sender: TObject);
begin
  ShowMessage('');
end;

procedure TFNewClient.FrameTopPanel1btnRefreshClick(Sender: TObject);
begin
  ShowMessage('');
end;

procedure TFNewClient.InsertUpdClient(id_ins: boolean);
begin
  with Query1 do
  begin
    Close;
    if id_ins = true then
    begin
      s_id_client := PGSQL.NewID('"контрагенты"."клиенты_id_seq"');
      SQL.Text :=
        'INSERT INTO "контрагенты"."клиенты" (id, "код_типа", "код_организации", '
        + ' "код_пользователя", "код_статуса_работы", name, "адрес", "комментарий",'
        + '   "почта",  "телефон",  "факс",  "макс_долг",  "макс_долг_дней",' +
        '  "до_окончания","инн",  "огрн",  "окпо",  "в_лице",  "подпись",  "паспорт_серия",'
        + ' "паспорт_номер",  "дата_выдачи",  "кем_выдан", "юр_адрес", "факт_адрес", '
        + ' "почт_адрес", "юр_имя" ) VALUES (:id, :код_типа, :код_организации,'
        + '  :код_пользователя,  :код_статуса_работы,  :name,  :адрес,  :комментарий,'
        + '    :почта,  :телефон,  :факс,  :макс_долг,  :макс_долг_дней, ' +
        ' :до_окончания, :инн,  :огрн, :окпо,  :в_лице,  :подпись, ' +
        '  :паспорт_серия,  :паспорт_номер,  :дата_выдачи,  :кем_выдан, :юр_адрес,'
        + '  :факт_адрес,  :почт_адрес, :юр_имя ) ';
    end
    else
    begin
      SQL.Text := 'UPDATE "контрагенты"."клиенты" SET "код_типа" = :код_типа, '
        + ' "код_организации" = :код_организации,  "код_пользователя" = :код_пользователя, '
        + ' "код_статуса_работы" = :код_статуса_работы,' +
        ' name = :name,  "адрес" = :адрес,  "комментарий" = :комментарий,' +
        ' "не_удалять" = :не_удалять,  "почта" = :почта,  "телефон" = :телефон,'
        + '  "факс" = :факс,  "макс_долг" = :макс_долг,  "макс_долг_дней" = :макс_долг_дней,'
        + '  "долг" = :долг,    "до_окончания" = :до_окончания, ' +
        '  "инн" = :инн,  "огрн" = :огрн,  "окпо" = :окпо,  "в_лице" = :в_лице,'
        + '  "подпись" = :подпись,  "паспорт_серия" = :паспорт_серия,' +
        '  "паспорт_номер" = :паспорт_номер,  "дата_выдачи" = :дата_выдачи,' +
        '  "кем_выдан" = :кем_выдан,  "юр_адрес" = :юр_адрес,  "факт_адрес" = :факт_адрес, '
        + '  "почт_адрес" = :почт_адрес, юр_имя=:юр_имя WHERE  id = :id';
    end;
    ParamByName('id').AsInteger := s_id_client;
    ParamByName('код_типа').AsInteger := s_id_type_for_edit;
    ParamByName('код_организации').AsInteger := s_id_org;
    if edtManager.Text<>'' then
    
    ParamByName('код_пользователя').AsInteger := edtManager.EditValue;
    ParamByName('код_статуса_работы').AsInteger := edtStat.EditValue;
    ParamByName('name').AsString := edtName.Text;
    ParamByName('адрес').AsString := mmoAdress.Text;
    ParamByName('комментарий').AsString := mmoComent.Text;
    ParamByName('почта').AsString := edtEmail.Text;
    ParamByName('телефон').AsString := edtPhone.Text;
    ParamByName('факс').AsString := edtFAX.Text;
    ParamByName('до_окончания').AsString := edtDayAlarm.Text;
    ParamByName('макс_долг').AsString := edtSumDolg.Text;
    ParamByName('макс_долг_дней').AsString := edtSrokDolg.Text;
    ParamByName('инн').AsString := edtINN.Text;
    ParamByName('огрн').AsString := edtOGRN.Text;
    ParamByName('окпо').AsString := edtOKPO.Text;
    ParamByName('в_лице').AsString := edtInFace.Text;
    ParamByName('подпись').AsString := edtSign.Text;
    ParamByName('паспорт_серия').AsString := edtPasportCod.Text;
    ParamByName('паспорт_номер').AsString := edtNumberPasport.Text;
    if edtDatePasport.Text <> '  .  .    ' then
      ParamByName('дата_выдачи').AsDate := edtDatePasport.date
    else
      ParamByName('дата_выдачи').value := Null;
    ParamByName('кем_выдан').AsString := mmoVidan.Text;
    ParamByName('юр_адрес').AsString := mmoUrAdres.Text;
    ParamByName('факт_адрес').AsString := mmoFactAdres.Text;
    ParamByName('почт_адрес').AsString := mmoDostavka.Text;
    ParamByName('юр_имя').AsString := mmoUrName.Text;
    ExecSQL;
  end;
end;

procedure TFNewClient.SetLang;
begin
  case FPasswd.Lang of
    0:
      begin
        Caption := 'Клиент';
        lblName.Caption := 'Наименование';
        lblAddr.Caption := 'Адрес';
        lblStat.Caption := 'Статус';
        lblComment.Caption := 'Комментарий';
      end;
    1:
      begin
        Caption := 'Сlient';
        lblName.Caption := 'Name';
        lblAddr.Caption := 'Address';
        lblStat.Caption := 'Status';
        lblComment.Caption := 'Comment';
      end;
    2:
      begin
        Caption := 'El cliente';
        lblName.Caption := 'El nombre';
        lblAddr.Caption := 'La dirección';
        lblStat.Caption := 'El estatus';
        lblComment.Caption := 'El comentario';
      end;
  end;
end;

procedure TFNewClient.ShowManager(s_id_manager: Integer = 0);
begin
  with QueryManager do
  begin
    Close;
    SQL.Text := 'select * from пользователи.пользователи ';
    if FPasswd.ID_ORG <> 1 then
    begin
      SQL.Add(' where код_организации=' + IntToStr(FPasswd.ID_ORG));
      // edtManager.EditValue := FPasswd.ID_USER;
    end;
    if s_id_manager <> 0 then
      edtManager.EditValue := s_id_manager;
    Open;
  end;
end;

procedure TFNewClient.ShowStat(s_id_stat: Integer = 0);
begin
  with QueryStat do
  begin
    Close;
    SQL.Text := 'select id, name from "контрагенты"."статусы"';
    Open;
    if s_id_stat = 0 then
      edtStat.EditValue := Fields[0].AsInteger
    else
      edtStat.EditValue := s_id_stat;
  end;
end;

end.
